package com.space.school.controller;

import com.space.school.services.LoginService;
import com.space.school.services.impl.LoginServiceImpl;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet(name = "loginServlet",value = "/loginServlet")
public class LoginServlet extends HttpServlet {
    private LoginService loginService=new LoginServiceImpl();
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        跳转到登录页面req.getRequestDispatcher(页面名称)
        req.getRequestDispatcher("login.jsp").forward(req,resp);
    }
//        Get请求和Post请求的区别
//        1.参数传递方式不同
//        Get请求:参数是通过url的查询字符串以键值对的形式
//        附加在url后面
//        get的请求参数长度是有限制的,一般不适合传递大量数据
//        post 请求 参数是以(form)表单的形式放在请求中进行传递的
//        而不会直接暴漏在url中
//        post 适用于传输大量的数据
//        2.安全性
//        get 会将参数直接显示在url中,不适用传递敏感数据
//        post 不会将参数直接显示在url中,安全性能较高
//        3.缓存
//        get请求 具有缓存性,浏览器会自动缓存get请求的响应结果
//        当再次发送相同的get请求，直接从缓存中获取响应，提高性能
//        post请求，没有缓存性，每次都需要向服务器发送请求
//        4. 幂等性：
//        GET 请求：GET 请求是幂等的，即多次执行相同的 GET 请求，
//        不会对服务器产生影响，也不会改变资源的状态。
//        POST 请求：POST 请求不具备幂等性，多次执行相同的 POST
//       请求可能会导致服务器上的资源状态发生变化。
//        Servlet 小型服务
//        HttpServletRequest
//        客户端的请求 HttpServletRequest
//        对象封装了客户端发送给服务器的http请求的所有信息,
//        并将这些信息参数传递给servlet的doget  dopost方法中
//         HttpServletResponse  响应
//        代表服务器对客户端的响应, 当Servlet处理完客户端的请求后
//        需要向客户端发送响应,我们设置了响应码头,相应码体,响应状态码

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        设定取出值的编码格式
        req.setCharacterEncoding("UTF-8");
//         req.getParameter  获取参数  Parameter
        String username = req.getParameter("userName");
        String password = req.getParameter("passWord");
//      账户,密码
        boolean flag=loginService.login(username,password);
        if(flag){
//            传前端
            req.getSession().setAttribute("username",username);
//            跳转到系统主页面
            req.getRequestDispatcher("list.jsp").forward(req,resp);
        }else {
//            1.账户错误
//            2.账户对了,密码错了
            //        当账户存在,密码错误的时候,提示你的密码输入错误
            boolean validPasswordFlag=loginService.validPassword(username);
            if(validPasswordFlag){
                req.getSession().setAttribute("login_msg","你的密码输入错误");
            }else {
                //            跳转到登录页
                req.getSession().setAttribute("login_msg","你未注册");
            }
            req.getRequestDispatcher("login.jsp").forward(req,resp);
        }
    }
}
